package com.woniu.admin.controller;

import cn.hutool.captcha.LineCaptcha;
import cn.hutool.core.lang.Snowflake;
import com.woniu.admin.vo.AjaxResult;
import com.woniu.admin.vo.CodeVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;

@RestController
@Slf4j
@ResponseBody
public class CodeController {
    @Resource
    LineCaptcha lineCaptcha;

    @Resource
    Snowflake snowflake;

    @Resource
    HashMap<String, String> map;

    @GetMapping("/getCode")
    public AjaxResult getCode(HttpServletResponse response) throws IOException {
        //图形验证码写出，可以写出到文件，也可以写出到流
        // lineCaptcha.write("d:/line.png");
        lineCaptcha.createCode();
        //输出code
        String code = lineCaptcha.getCode();
        log.info("生成的验证码：" + code);

        // 再生成一个ID，让后端，可以识别到前端：
        long codeId = snowflake.nextId();

        // 把生成的codeId 和 code 进行级存
        map.put(codeId + "", code);

        // 这里改成了，生成base64编码图片，方便我们处理。
        String imageBase64Data = lineCaptcha.getImageBase64Data();

        // lineCaptcha.write(response.getOutputStream());
        CodeVo codeVo = new CodeVo();

        codeVo.setCodeId(codeId + "");
        codeVo.setCode(imageBase64Data);

        return AjaxResult.success("200", codeVo);
    }

    @GetMapping("/verifyCode")
    public AjaxResult verifyCode(@RequestParam("code") String userCode, @RequestParam("codeId") String codeId) {
        String storedCode = map.get(codeId);
        //验证图形验证码的有效性，返回boolean值
        if (storedCode != null && storedCode.equalsIgnoreCase(userCode)) {
            map.remove(codeId); // 验证通过后，移除验证码
            return AjaxResult.success("验证码正确");
        } else {
            return AjaxResult.error("验证码错误");
        }
    }
}